import pandas as pd
import matplotlib.pyplot as plt
import matplotlib

# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 读取Excel文件
data = pd.read_excel(r"C:\Users\86158\Desktop\FhjlViewDD.xlsx")

# 确保日期列是datetime类型
data['创建时间'] = pd.to_datetime(data['创建时间'])

# 计算矿粉和水泥货运量
data['矿粉货运量'] = data[data['货品'] == '矿粉']['净重']
data['水泥货运量'] = data[data['货品'] == '水泥']['净重']

# a. 统计6月份每日矿粉货运量的日趋势，并画柱状图
def plot_daily_mineral_powder():
    june_data = data[data['创建时间'].dt.month == 6]
    daily_mineral = june_data.groupby(june_data['创建时间'].dt.day)['矿粉货运量'].sum()
    
    plt.figure(figsize=(12, 6))
    daily_mineral.plot(kind='bar')
    plt.title('6月份每日矿粉货运量')
    plt.xlabel('日期')
    plt.ylabel('货运量（吨）')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig('project/练习一/daily_mineral_powder.png')
    plt.close()

# b. 统计6月份每日水泥货运量的日趋势图，并画柱状图
def plot_daily_cement():
    june_data = data[data['创建时间'].dt.month == 6]
    daily_cement = june_data.groupby(june_data['创建时间'].dt.day)['水泥货运量'].sum()
    
    plt.figure(figsize=(12, 6))
    daily_cement.plot(kind='bar')
    plt.title('6月份每日水泥货运量')
    plt.xlabel('日期')
    plt.ylabel('货运量（吨）')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig('project/练习一/daily_cement.png')
    plt.close()

# c. 统计每个客户的6月份的货运需求量，并按大到小排序
def customer_demand():
    june_data = data[data['创建时间'].dt.month == 6]
    customer_demand = june_data.groupby('客户')['净重'].sum().sort_values(ascending=False)
    
    plt.figure(figsize=(18, 6))
    customer_demand.plot(kind='bar')
    plt.title('6月份客户货运需求量排名')
    plt.xlabel('客户')
    plt.ylabel('货运量（吨）')
    plt.xticks(rotation=30, ha='right', fontsize=8)
    plt.tight_layout()
    plt.savefig('project/练习一/customer_demand.png')
    plt.close()
    
    print("客户货运需求量排名：")
    print(customer_demand)
    return customer_demand

# d. 统计6月份各发货地的发货总量，并绘制饼状图
def plot_shipping_locations():
    june_data = data[data['创建时间'].dt.month == 6]
    location_total = june_data.groupby('发货地')['净重'].sum()
    
    plt.figure(figsize=(10, 10))
    location_total.plot(kind='pie', autopct='%1.1f%%')
    plt.title('6月份各发货地发货量占比')
    plt.ylabel('')
    plt.tight_layout()
    plt.savefig('project/练习一/shipping_locations.png')
    plt.close()

# e. 统计6月份各车牌号的总货运量，并按大至小排序
def vehicle_ranking():
    june_data = data[data['创建时间'].dt.month == 6]
    vehicle_total = june_data.groupby('车辆')['净重'].sum().sort_values(ascending=False)
    
    plt.figure(figsize=(12, 6))
    vehicle_total.plot(kind='bar')
    plt.title('6月份车辆货运量排名')
    plt.xlabel('车牌号')
    plt.ylabel('货运量（吨）')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig('project/练习一/vehicle_ranking.png')
    plt.close()
    
    print("车辆货运量排名：")
    print(vehicle_total)
    return vehicle_total

if __name__ == '__main__':
    plot_daily_mineral_powder()
    plot_daily_cement()
    customer_demand()
    plot_shipping_locations()
    vehicle_ranking()